﻿BEGIN TRANSACTION;

/*
Функции нахождения полинома least_squares_polynom_array, legendre_polynom_array(массив значений x, массив значений y, кол-во пар значений x и y, степень полинома [по умолчанию находит лучшую <= 7]):
*/
CREATE FUNCTION least_squares_polynom_array(double precision[], double precision[], bigint)
RETURNS double precision[] AS 'libdecoding_plugin.so', 'least_squares_polynom_array'
LANGUAGE C STRICT
PARALLEL SAFE;

CREATE FUNCTION legendre_polynom_array(double precision[], double precision[], bigint)
RETURNS double precision[] AS 'libdecoding_plugin.so', 'legendre_polynom_array'
LANGUAGE C STRICT
PARALLEL SAFE;
/*
Перегрузка (дополнительно принимает степень полинома):
*/
CREATE FUNCTION least_squares_polynom_array(double precision[], double precision[], bigint, integer)
RETURNS double precision[] AS 'libdecoding_plugin.so', 'least_squares_polynom_array'
LANGUAGE C STRICT
PARALLEL SAFE;

CREATE FUNCTION legendre_polynom_array(double precision[], double precision[], bigint, integer)
RETURNS double precision[] AS 'libdecoding_plugin.so', 'legendre_polynom_array'
LANGUAGE C STRICT
PARALLEL SAFE;
/*
Функции нахождения коэффициентов методом кусочно-линейной аппроксимации lineal_pices(массив значений x, массив значений y, кол-во пар значений x и y). Возвращает массив пар коэффициентов, под чётными индексами k0, под нечётными k1:
*/
CREATE FUNCTION lineal_pices(double precision[], double precision[], bigint)
RETURNS double precision[] AS 'libdecoding_plugin.so', 'lineal_pices'
LANGUAGE C STRICT
PARALLEL SAFE;


/*
Функции расчёта значений y c помощью полинома calc_values_by_polynom(массив значений x, массив коэффициентов полинома, кол-во значений x, кол-во коэффициентов полинома):
*/
CREATE FUNCTION calc_values_by_polynom(double precision[], double precision[], bigint, bigint)
RETURNS double precision[] AS 'libdecoding_plugin.so', 'calc_values_by_polynom'
LANGUAGE C STRICT
PARALLEL SAFE;
/*
Если значения хранятся в таблице calc_value_by_polynom(массив коэффициентов полинома, кол-во коэффициентов полинома, значение/колонка таблицы):
*/
CREATE FUNCTION calc_value_by_polynom(double precision[], bigint, double precision)
RETURNS double precision AS 'libdecoding_plugin.so', 'calc_value_by_polynom'
LANGUAGE C STRICT
PARALLEL SAFE;


/*
Функции расчёта значений y c помощью кусочно-линейной аппроксимации lineal_calc_values(массив значений x, кол-во значений x, коэффициенты аппроксимации[под чётными индексами k0 под нечётными k1], границы действия коэффициентов, размер массива границ):
*/
CREATE FUNCTION lineal_calc_values(double precision[], bigint, double precision[], double precision[], bigint)
RETURNS double precision[] AS 'libdecoding_plugin.so', 'lineal_calc_values'
LANGUAGE C STRICT
PARALLEL SAFE;
/*
Если значения хранятся в таблице lineal_calc_value(коэффициенты аппроксимации[под чётными индексами k0 под нечётными k1], границы действия коэффициентов, размер массива границ, значение/колонка таблицы):
*/
CREATE FUNCTION lineal_calc_value(double precision[], double precision[], bigint, double precision)
RETURNS double precision AS 'libdecoding_plugin.so', 'lineal_calc_value'
LANGUAGE C STRICT
PARALLEL SAFE;


/*
функции модулей преобразования тарировочных характеристик:
*/

CREATE FUNCTION MODX5(double precision[], bigint, double precision, double precision, double precision)
RETURNS double precision[] AS 'libdecoding_plugin.so', 'MODX5'
LANGUAGE C STRICT
PARALLEL SAFE;

CREATE FUNCTION MODX6(double precision[], bigint, double precision, double precision, double precision)
RETURNS double precision[] AS 'libdecoding_plugin.so', 'MODX6'
LANGUAGE C STRICT
PARALLEL SAFE;

CREATE FUNCTION MODX7(double precision[], bigint, double precision, double precision, double precision)
RETURNS double precision[] AS 'libdecoding_plugin.so', 'MODX7'
LANGUAGE C STRICT
PARALLEL SAFE;

CREATE FUNCTION MODY1(double precision[], bigint, double precision)
RETURNS double precision[] AS 'libdecoding_plugin.so', 'MODY1'
LANGUAGE C STRICT
PARALLEL SAFE;

CREATE FUNCTION MODY2(double precision[], bigint, double precision)
RETURNS double precision[] AS 'libdecoding_plugin.so', 'MODY2'
LANGUAGE C STRICT
PARALLEL SAFE;

CREATE FUNCTION MODY3(double precision[], bigint, double precision)
RETURNS double precision[] AS 'libdecoding_plugin.so', 'MODY3'
LANGUAGE C STRICT
PARALLEL SAFE;

CREATE FUNCTION MODY4(double precision[], bigint, double precision, double precision)
RETURNS double precision[] AS 'libdecoding_plugin.so', 'MODY4'
LANGUAGE C STRICT
PARALLEL SAFE;

CREATE FUNCTION MODX1(double precision[], bigint, double precision)
RETURNS double precision[] AS 'libdecoding_plugin.so', 'MODX1'
LANGUAGE C STRICT
PARALLEL SAFE;

CREATE FUNCTION MODX4(double precision[], bigint, double precision, double precision)
RETURNS double precision[] AS 'libdecoding_plugin.so', 'MODX4'
LANGUAGE C STRICT
PARALLEL SAFE;

CREATE FUNCTION MODX3(double precision[], bigint, double precision)
RETURNS double precision[] AS 'libdecoding_plugin.so', 'MODX3'
LANGUAGE C STRICT
PARALLEL SAFE;

CREATE FUNCTION MODX2(double precision[], bigint, double precision, double precision, double precision, double precision, double precision)
RETURNS double precision[] AS 'libdecoding_plugin.so', 'MODX2'
LANGUAGE C STRICT
PARALLEL SAFE;

CREATE FUNCTION MODXY7(double precision[], double precision[], bigint, double precision[], double precision[], bigint)
RETURNS double precision[] AS 'libdecoding_plugin.so', 'MODXY7'
LANGUAGE C STRICT
PARALLEL SAFE;

CREATE FUNCTION MODXY8(double precision[], double precision[], double precision[], double precision[], bigint)
RETURNS double precision[] AS 'libdecoding_plugin.so', 'MODXY8'
LANGUAGE C STRICT
PARALLEL SAFE;

COMMIT;
